package test01.demo05;

/**
 * @author CSY
 * @date 2025 - 04 - 09
 */
public enum Grade {
    //public static final Grede A = new Grade();
    /**
     * A：优秀，分数在90-100之间
     */
    A("优秀"){
        @Override
        public String getScoreRange() {
            return "A：优秀，分数在90-100之间";
        }
    },
    /**
     * B：良好，分数在80-90之间
     */
    B("良好"){
        @Override
        public String getScoreRange() {
            return "B：良好，分数在80-90之间";
        }
    },
    /**
     * C：中等，分数在70-80之间
     */
    C("中等") {
        @Override
        public String getScoreRange() {
            return "C：中等，分数在70-80之间";
        }
    },
    /**
     * D：合格，分数在60-70之间
     */
    D("合格") {
        @Override
        public String getScoreRange() {
            return "D：合格，分数在60-70之间";
        }
    },
    /**
     * E：不合格，分数在60之下
     */
    E("不合格") {
        @Override
        public String getScoreRange() {
            return "E：不合格，分数在60之下";
        }
    };
    //当有了带参构造方法后，并且重新给了无参构造方法，那么预设值就必须带参，否则在外部使用时值为null
//    A,B,C,D,E

    /**
     * 成员变量
     */
    private String value;

    public static final float PI = 3.14f;

    //构造方法
    Grade(){}

    //构造方法必须存在才可以预设值设置参数,重载构造方法
    Grade(String value){
        this.value = value;
    }

    public void sayHello(){
        System.out.println("Hello");
    }

    /**
     * 抽象方法 - 创建枚举值时，必须以匿名内部类的形式创建
     * @return
     */
    public abstract String getScoreRange();

    /**
     * 重写方法
     * @return 等级中文描述
     */
    @Override
    public String toString() {
        return this.value;
    }
}
